![]() |
![]() |
|
rtk 19981998.1.21. podnalogaPri predmetu programiranja so učenci sestavili lasten program za urejanje
besedila. Med drugimi so napisali funkcije NalogaPreuredi vrstice funkcije
Vhodni podatkiCela števila zapisana v obliki niza. Izhodni podatkiVrne niz števila z ustreznimi presledki med vsakimi tremi števkami. PrimerVhod
Izhod
Uradna rešitevzacasni_pomnilnik = '' def brisi_znak(niz, i): '''zbriše znak na i-tem mestu v nizu in ga shrani v zacasni pomnilnik''' if i >= len(niz): return niz global zacasni_pomnilnik zacasni_pomnilnik = niz[i] return niz[:i] + niz[i+1:] def vrini_izbrisano(niz, i): '''na i-to mesto v nizu vrine znake iz začasnega pomnilnika''' if i > len(niz): return niz elif i == len(niz): return niz + zacasni_pomnilnik else: return niz[:i] + zacasni_pomnilnik + niz[i:] def vrini_presledek(niz, i): '''na i-to mesto v nizu vrine presledek''' if i > len(niz): return niz elif i == len(niz): return niz + ' ' else: return niz[:i] + ' ' + niz[i:] ################################################################################ def pregledna_stevila(stevilo): '''število naredi bolj pregledno, tako da na vsake tri mesta vrine presledek''' n = len(stevilo) pregledno_stevilo = stevilo[::-1] i = 3 st_presledkov = 0 while i < n: pregledno_stevilo = vrini_presledek(pregledno_stevilo, i+st_presledkov) i += 3 st_presledkov += 1 return pregledno_stevilo[::-1] # še boljša možna rešitev: def pregledna_stevila_1(stevilo): '''število naredi bolj pregledno, tako da na vsake tri mesta vrine presledek''' i = 3 while i < len(stevilo): stevilo = vrini_presledek(stevilo, -i) i += 4 return stevilo 1998.1.31. podnalogaPodjetja vsako leto zaslužijo nekaj denarja. Ob koncu leta, ko je obračun, morajo prikazati dobiček. Zaradi hecnih zakonov se jim ne splača prikazati dobička, ki je večji kot 1000 cekinov. Naše podjetje ”Hlevi softwearskih ljubiteljev“ (hsl) si vsako leto izplača največji dobiček, ki ne presega 1000 cekinov, preostanek denarja pa prenese v naslednje leto. NalogaPreuredi vrstice funkcije
Vhodni podatkiSeznam letnih dobičkov. Izhodni podatkiSeznam parov (dobiček, prenos). PrimerVhod
Izhod
Uradna rešitevdef knjigovodstvo(letni_dobicki): '''Prejme seznam letnih dobičkov in vrne seznam parov (dobiček, prenos).''' prenos = 0 dobicek_prenos = [] for dobicek in letni_dobicki: prenos += dobicek if prenos > 1000: dobicek = 1000 else: dobicek = prenos prenos -= dobicek dobicek_prenos.append((dobicek,prenos)) return dobicek_prenos 1998.2.11. podnalogaPodane so celoštevilske koordinate NalogaPreuredi vrstice funkcije
Vhodni podatkiSeznama X in Y koordinat danih točk. Predpostavimo, da sta enako dolga, torej da sta za vse točke določeni obe koordinati. Število na i-tem mestu v seznamu X predstavlja x koordinato i-te točke, število na i-tem mestu v seznamu Y pa y koordinato i-te točke. Območje, na katerem ležijo točke v ravnini, je znotraj kvadrata:
Izhodni podatkiŠtevilo kvadratov. PrimerVhod
Izhod
Uradna rešitev# Taki dve točki torej prepoznamo po # tem, da imata obe enako razliko med x- in y-koordinato. def kvadrati(sez_X, sez_Y): '''Glede na točke vrne število kvadratov.''' n = len(sez_X) st_kvadratov = 0 for i in range(n): koordinata_X1 = sez_X[i] koordinata_Y1 = sez_Y[i] for j in range(i + 1, n): koordinata_X2 = sez_X[j] koordinata_Y2 = sez_Y[j] if abs(koordinata_X1 - koordinata_X2) == abs(koordinata_Y1 - koordinata_Y2): st_kvadratov += 1 return st_kvadratov # še ena možna rešitev: def kvadrati_1(sez_X, sez_Y): '''Prejme podatke o točkah v koordinatnem sistemu in vrne število kvadratov.''' a = [0 for k in range(-2000,2001)] st_kvadratov = 0 # število najdenih kvadratov for j in range(len(sezX)): i = sez_X[j] - sez_Y[j] st_kvadratov += a[i] a[i] += 1 return st_kvadratov# Naj bosta (x, y) in (x0, y0) dve točki, ki ležita v spodnjem levem in zgornjem # desnem oglišču nekega kvadrata s stranico a. Potem mora veljati x0 = x+a in # y0 = y+a, torej x0−y0 = (x+a)−(y+a) = x−y. Taki dve točki torej prepoznamo po # tem, da imata obe enako razliko med x- in y-koordinato; z drugimi besedami, # če bi skozi vsako točko poslali premico, ki oklepa z absciso kot 45 stopinj, # bi bila to obakrat ena in ista premica. # # Zato lahko ravnamo takole: pripravimo si tabelo a[−2000..2000], katere # elementi bodo cela števila; na začetku postavimo vse elemente na nič. # Z elementom a[i] bomo šteli, koliko točk leži na premici x−y = i. # Imejmo še nek števec, ki pove, koliko kvadratov smo že našli (recimo mu S). # Potem za vsako točko (x, y) izračunamo x − y in vemo, da smo doslej odkrili # a[x − y] točk z enako razliko med koordinatama in da naša nova točka tvori po # en kvadrat z vsako od njih. # # Torej povečajmo S za a[x − y], nato pa povečajmo a[x − y] za 1, da v mislih # dodamo pravkar prebrano točko med tiste s takšno razliko koordinat. def kvadrati(X, Y): '''Prejme podatke o točkah v koordinatnem sistemu in vrne število kvadratov.''' a = [0 for k in range(-2000,2001)] s = 0 # število najdenih kvadratov for j in range(len(X)): i = X[j] - Y[j] s += a[i] a[i] += 1 return sMesto objave ob koncu projekta 15.9.2018 |